package controlador;

import java.awt.Dimension;

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import java.beans.PropertyVetoException;

import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JFrame;

import vista.acercade;
import vista.picasaPublic;
//import vista.login;
import vista.principal;


/*Import package controlador.CloseListener*/


/**
 * @author Ruanova
 */
public class controlador implements ActionListener{

    private principal frmMain;
    //formularios hijos
//    login frmlogin;
    acercade frmAcercade;
    picasaPublic frmPicasaPublic;
//____________________________
   //En el constructor inicializamos nuestros objetos
   public controlador( principal vista ){
       this.frmMain = vista;
       iniciar();
   }
//____________________________
/* INICIA */
    private void iniciar()
    {
        /*Cambiar icono del JPanel principal*/
        frmMain.setIconImage(new ImageIcon(getClass().getResource("/imagenes/CenG_y_Picasa-ico.png")).getImage());
        /*Cambiar la imagen de fondo del JPanel principal*/
        frmMain.jCDesktopPane.setImagenDeFondo(new ImageIcon(getClass().getResource("/imagenes/acercade-ceng-picarocks-con-texto-copyright.png")));
        
        frmMain.setTitle( "PicaRocks para CorrerEnGalicia.org" );
        frmMain.setLocationRelativeTo(null);//centrado en pantalla
        //frmMain.setExtendedState(principal.MAXIMIZED_BOTH);//estado maximizado
        frmMain.setExtendedState(principal.NORMAL);
        //se añade las acciones a los controles del formulario padre
        this.frmMain.cmdConectarCenG.setActionCommand("Conectar Picasa CenG");
        this.frmMain.cmdConectarPrivado.setActionCommand("Conectar Picasa privado");
        this.frmMain.cmdDesconectar.setActionCommand("Desconectar de Picasa");
        this.frmMain.cmdAcercaDe.setActionCommand("Acerca de");
        this.frmMain.cmdSalir.setActionCommand("Cerrar Programa");
        //Se pone a escuchar las acciones del usuario
        frmMain.cmdConectarCenG.addActionListener(this);
        frmMain.cmdConectarPrivado.addActionListener(this);
        frmMain.cmdDesconectar.addActionListener(this);
        frmMain.cmdAcercaDe.addActionListener(this);
        
        /* Al comando del menu Salir le asigno la accion ExitAction, que está 
         *  en la clase ExitAction.java del Package controlador, y que invoca
         *  CloseListener.java en el mismo Package, para cerrar de forma segura
         *  la aplicacion
         */
        frmMain.cmdSalir.addActionListener(new ExitAction());
        
        
    
        /*Usando ExitAction.java y CloseListener.java del Package controlador, para cerrar de forma segura la aplicacion*/
        CloseListener cl = new CloseListener(
            "Por favor, confirma que quieres abandonar la aplicación",
            "Cerrar Aplicación");
        this.frmMain.addWindowListener( cl );    
        
    }
//____________________________
/* muestra la vista al usuario */
    public void go()
    {
        this.frmMain.setVisible(true);
    }
//____________________________
    /* ATENTO A LAS ACCIONES DEL USUARIO */
    @Override
    public void actionPerformed(ActionEvent e) {
        String comando = e.getActionCommand();
       
        /* Acciones del formulario padre */        
        switch (comando) {
            case "Abrir Sesion":
                form_logueo();
                break;                
                
            case "Conectar Picasa CenG":                
                /*
                this.frmMain.cmdConectarCenG.setEnabled(false);
                this.frmMain.cmdConectarPrivado.setEnabled(true);
                this.frmMain.cmdDesconectar.setEnabled(true);
                this.frmMain.cmdSalir.setEnabled(false);
                */
                /* Crear nuevo formulario picasaPublic */
                frmPicasaPublic = new picasaPublic();
                /* Añadirlo a los formularios MDI del DektopPane del Form Main */
                this.frmMain.jCDesktopPane.add(frmPicasaPublic);
                
                conectarPicasaPublic();
                rellenarListaDeAlbums();
                
                //centrado de formulario
                frmPicasaPublic.setLocation(centradoXY(frmPicasaPublic));
                frmPicasaPublic.setVisible(true);                                
                break;                
                
            case "Desconectar de Picasa":
                //deshabilita/habilita controles según sea necesario
                /*
                this.frmMain.cmdConectarCenG.setEnabled(true);
                this.frmMain.cmdConectarPrivado.setEnabled(true);
                this.frmMain.cmdSalir.setEnabled(false);                
                */
                cerrar_todo();
                break;
                
            case "Acerca de":
                frmAcercade = new acercade();
                this.frmMain.jCDesktopPane.add(frmAcercade);
                frmAcercade.setTitle("Acerca de...");                
                //centrado de formulario
                frmAcercade.setLocation(centradoXY(frmAcercade));
                frmAcercade.setVisible(true);
                break;
        }          
    }
    
private boolean conectarPicasaPublic(){
    boolean ret=false;
    
    return ret;
}   
private boolean rellenarListaDeAlbums(){
        boolean ret=false;
        return ret;
}
//____________________________
//METODO QUE DEVUELVE UN VALOR BOOLEAN PARA SABER SI UN JINTERNALFRAME ESTA ABIERTO O NO
private boolean estacerrado(Object obj){
    JInternalFrame[] activos=this.frmMain.jCDesktopPane.getAllFrames();
    boolean cerrado=true;
    int i=0;
    while (i<activos.length && cerrado){
	if(activos[i]==obj)
            cerrado=false;
	i++;
    }
    return cerrado;
}
//____________________________
// CIERRA TODOS LOS JInternalFrame QUE ESTEN ABIERTOS
private void cerrar_todo(){
    JInternalFrame[] activos=this.frmMain.jCDesktopPane.getAllFrames();
    //boolean cerrado=true;
    int i=0;
    while ( i<activos.length ){	
        cerrar(activos[i]);          
	i++;
    }   
}
//____________________________
// CIERRA UN JInternalFrame
private void cerrar(JInternalFrame jif)
{ 
    try {
        jif.setClosed(true);
    } catch (PropertyVetoException ex) {}
}
//____________________________
//funcion que dado un JInternalFrame calcula la posicion de centrado respecto a su contenedor, retorna las coordenadas en una variable de tipo POINT
    private Point centradoXY(JInternalFrame jif)
    {
        Point p = new Point(0,0);
        //se obtiene dimension del contenedor
        Dimension pantalla = this.frmMain.jCDesktopPane.getSize();
        //se obtiene dimension del JInternalFrame
        Dimension ventana = jif.getSize();
        //se calcula posición para el centrado
        p.x = (pantalla.width - ventana.width) / 2;
        p.y = (pantalla.height - ventana.height) / 2;
        return p;
    }

//____________________________
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/    
/*::::::::::::::: FORMULARIOS  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/    
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
//____________________________
/* ABRE EL FORMULARIO PARA IDENTIFICARSE EN EL SISTEMA */
private void form_logueo()
{
/*    
    if(estacerrado(frmlogin)){//se crea nuevo
        frmlogin = new login();
        this.frmMain.jCDesktopPane.add(frmlogin);
        frmlogin.setTitle("Identificate");
        //Se añaden las acciones a los controles
        this.frmlogin.cmdIngresar.setActionCommand("Ingresar");
        this.frmlogin.cmdCancelar.setActionCommand("Cancelar");
        //Se pone a escuchar
        frmlogin.cmdIngresar.addActionListener(this);
        frmlogin.cmdCancelar.addActionListener(this);
        //centrado de formulario
        frmlogin.setLocation(centradoXY(frmlogin));
        frmlogin.setVisible(true);
    }
    else{
        JOptionPane.showMessageDialog(this.frmMain,"La ventana de 'Identificación' ya esta abierta.");
    }

    */
}

}
